﻿// See https://aka.ms/new-console-template for more information
using ObserverPattern.Observer;
using ObserverPattern.Subject;

Console.WriteLine("****************第一个版本*******************");

// 观察者模式

// 第一种做法,在 Miao 方法内部耦合了很多其他类，
// 缺点是 Cat 类不稳定，如果客户端需要增减类型或者修改执行的顺序就需要修改 Cat
Cat cat = new Cat();
cat.Maio();

// 第二种做法 使用观察者模式
Console.WriteLine("****************第二个版本 Maio Observer  *******************");
cat.AddObserver(new Mouse());
cat.AddObserver(new Dog());
cat.AddObserver(new Steal());
cat.AddObserver(new Baby());
cat.AddObserver(new Father());
cat.AddObserver(new Mother());
cat.AddObserver(new Neighbor());
cat.MaioObserver();
Console.WriteLine("****************第二个版本 Maio Observer  *******************");
{
    Cat cat2 = new Cat();
    cat2.AddObserver(new Dog());
    cat2.AddObserver(new Steal());
    cat2.AddObserver(new Baby());
    cat2.MaioObserver();
}
Console.WriteLine("****************第三个版本 Maio Event  *******************");

Cat cat3 = new Cat();
cat3.MaioEventHandler += new Mouse().Run;
cat3.MaioEventHandler += new Dog().Wang;
cat3.MaioEventHandler += new Baby().Cry;
cat3.MaioEventHandler += new Father().Roar;
cat3.MaioEventHandler += new Mother().Wisper;
cat3.MaioEventHandler += new Steal().Hide;
cat3.MaioEventHandler += new Neighbor().Awaik;
cat3.MaioEvent();